package com.cencat.common.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 缓存注解
 * 标记在方法上，自动进行缓存处理
 * 
 * @author cencat
 * @since 2024-01-01
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Cache {
    
    /**
     * 缓存键前缀
     * @return 缓存键前缀
     */
    String prefix() default "";
    
    /**
     * 缓存键
     * 支持SpEL表达式，如：#id、#user.id
     * @return 缓存键
     */
    String key() default "";
    
    /**
     * 缓存过期时间
     * @return 过期时间
     */
    long expire() default 30L;
    
    /**
     * 时间单位
     * @return 时间单位
     */
    TimeUnit timeUnit() default TimeUnit.MINUTES;
    
    /**
     * 是否允许缓存null值
     * @return true-允许缓存null值，false-不允许缓存null值
     */
    boolean cacheNull() default false;
    
    /**
     * 缓存条件
     * 支持SpEL表达式
     * @return 缓存条件
     */
    String condition() default "";
    
    /**
     * 排除条件
     * 支持SpEL表达式
     * @return 排除条件
     */
    String unless() default "";
}